1 /* 2 3 Boost Software License - Version 1.0 - August 17th, 2003 4 5 Permission is hereby granted, free of charge, to any person or organization 6 obtaining a copy of the software and accompanying documentation covered by 7 this license (the "Software") to use, reproduce, display, distribute, 8 execute, and transmit the Software, and to prepare derivative works of the 9 Software, and to permit third-parties to whom the Software is furnished to 10 do so, all subject to the following: 11 12 The copyright notices in the Software and this entire statement, including 13 the above license grant, this restriction and the following disclaimer, 14 must be included in all copies of the Software, in whole or in part, and 15 all derivative works of the Software, unless such copies or derivative 16 works are solely in the form of machine-executable object code generated by 17 a source language processor. 18 19 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT 22 SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE 23 FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, 24 ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 25 DEALINGS IN THE SOFTWARE. 26 27 */ 28 29 module derelict.purple.plugin; 30 31 import derelict.glib.gtypes; 32 import derelict.glib.glibconfig; 33 import derelict.glib.glist; 34 import derelict.purple.pluginpref; 35 import derelict.purple.signals; 36 import derelict.purple.value; 37 import core.stdc.config; 38 39 extern (C): 40 41 alias _PurplePlugin PurplePlugin; 42 alias _PurplePluginInfo PurplePluginInfo; 43 alias _PurplePluginUiInfo PurplePluginUiInfo; 44 alias _PurplePluginLoaderInfo PurplePluginLoaderInfo; 45 alias _PurplePluginAction PurplePluginAction; 46 alias int PurplePluginPriority; 47 alias _Anonymous_0 PurplePluginType; 48 49 enum _Anonymous_0 50 { 51 PURPLE_PLUGIN_UNKNOWN = -1, 52 PURPLE_PLUGIN_STANDARD = 0, 53 PURPLE_PLUGIN_LOADER = 1, 54 PURPLE_PLUGIN_PROTOCOL = 2 55 } 56 57 struct _PurplePluginInfo 58 { 59 uint magic; 60 uint major_version; 61 uint minor_version; 62 PurplePluginType type; 63 char* ui_requirement; 64 c_ulong flags; 65 GList* dependencies; 66 PurplePluginPriority priority; 67 char* id; 68 char* name; 69 char* version_; 70 char* summary; 71 char* description; 72 char* author; 73 char* homepage; 74 gboolean function (PurplePlugin*) load; 75 gboolean function (PurplePlugin*) unload; 76 void function (PurplePlugin*) destroy; 77 void* ui_info; 78 void* extra_info; 79 PurplePluginUiInfo* prefs_info; 80 GList* function (PurplePlugin*, gpointer) actions; 81 void function () _purple_reserved1; 82 void function () _purple_reserved2; 83 void function () _purple_reserved3; 84 void function () _purple_reserved4; 85 } 86 87 struct _PurplePluginLoaderInfo 88 { 89 GList* exts; 90 gboolean function (PurplePlugin*) probe; 91 gboolean function (PurplePlugin*) load; 92 gboolean function (PurplePlugin*) unload; 93 void function (PurplePlugin*) destroy; 94 void function () _purple_reserved1; 95 void function () _purple_reserved2; 96 void function () _purple_reserved3; 97 void function () _purple_reserved4; 98 } 99 100 struct _PurplePlugin 101 { 102 gboolean native_plugin; 103 gboolean loaded; 104 void* handle; 105 char* path; 106 PurplePluginInfo* info; 107 char* error; 108 void* ipc_data; 109 void* extra; 110 gboolean unloadable; 111 GList* dependent_plugins; 112 void function () _purple_reserved1; 113 void function () _purple_reserved2; 114 void function () _purple_reserved3; 115 void function () _purple_reserved4; 116 } 117 118 struct _PurplePluginUiInfo 119 { 120 PurplePluginPrefFrame* function (PurplePlugin*) get_plugin_pref_frame; 121 int page_num; 122 PurplePluginPrefFrame* frame; 123 void function () _purple_reserved1; 124 void function () _purple_reserved2; 125 void function () _purple_reserved3; 126 void function () _purple_reserved4; 127 } 128 129 struct _PurplePluginAction 130 { 131 char* label; 132 void function (PurplePluginAction*) callback; 133 PurplePlugin* plugin; 134 gpointer context; 135 gpointer user_data; 136 } 137 138 139 version(Derelict_Link_Static) 140 { 141 extern( C ) nothrow 142 { 143 PurplePlugin* purple_plugin_new(gboolean native, const(char)* path); 144 PurplePlugin* purple_plugin_probe(const(char)* filename); 145 gboolean purple_plugin_register(PurplePlugin* plugin); 146 gboolean purple_plugin_load(PurplePlugin* plugin); 147 gboolean purple_plugin_unload(PurplePlugin* plugin); 148 void purple_plugin_disable(PurplePlugin* plugin); 149 gboolean purple_plugin_reload(PurplePlugin* plugin); 150 void purple_plugin_destroy(PurplePlugin* plugin); 151 gboolean purple_plugin_is_loaded(const(PurplePlugin)* plugin); 152 gboolean purple_plugin_is_unloadable(const(PurplePlugin)* plugin); 153 const(gchar)* purple_plugin_get_id(const(PurplePlugin)* plugin); 154 const(gchar)* purple_plugin_get_name(const(PurplePlugin)* plugin); 155 const(gchar)* purple_plugin_get_version(const(PurplePlugin)* plugin); 156 const(gchar)* purple_plugin_get_summary(const(PurplePlugin)* plugin); 157 const(gchar)* purple_plugin_get_description(const(PurplePlugin)* plugin); 158 const(gchar)* purple_plugin_get_author(const(PurplePlugin)* plugin); 159 const(gchar)* purple_plugin_get_homepage(const(PurplePlugin)* plugin); 160 gboolean purple_plugin_ipc_register(PurplePlugin* plugin, const(char)* command, PurpleCallback func, PurpleSignalMarshalFunc marshal, PurpleValue* ret_value, int num_params, ...); 161 void purple_plugin_ipc_unregister(PurplePlugin* plugin, const(char)* command); 162 void purple_plugin_ipc_unregister_all(PurplePlugin* plugin); 163 gboolean purple_plugin_ipc_get_params(PurplePlugin* plugin, const(char)* command, PurpleValue** ret_value, int* num_params, PurpleValue*** params); 164 void* purple_plugin_ipc_call(PurplePlugin* plugin, const(char)* command, gboolean* ok, ...); 165 void purple_plugins_add_search_path(const(char)* path); 166 GList* purple_plugins_get_search_paths(); 167 void purple_plugins_unload_all(); 168 void purple_plugins_unload(PurplePluginType type); 169 void purple_plugins_destroy_all(); 170 void purple_plugins_save_loaded(const(char)* key); 171 void purple_plugins_load_saved(const(char)* key); 172 void purple_plugins_probe(const(char)* ext); 173 gboolean purple_plugins_enabled(); 174 void purple_plugins_register_probe_notify_cb(void function (void*) func, void* data); 175 void purple_plugins_unregister_probe_notify_cb(void function (void*) func); 176 void purple_plugins_register_load_notify_cb(void function (PurplePlugin*, void*) func, void* data); 177 void purple_plugins_unregister_load_notify_cb(void function (PurplePlugin*, void*) func); 178 void purple_plugins_register_unload_notify_cb(void function (PurplePlugin*, void*) func, void* data); 179 void purple_plugins_unregister_unload_notify_cb(void function (PurplePlugin*, void*) func); 180 PurplePlugin* purple_plugins_find_with_name(const(char)* name); 181 PurplePlugin* purple_plugins_find_with_filename(const(char)* filename); 182 PurplePlugin* purple_plugins_find_with_basename(const(char)* basename); 183 PurplePlugin* purple_plugins_find_with_id(const(char)* id); 184 GList* purple_plugins_get_loaded(); 185 GList* purple_plugins_get_protocols(); 186 GList* purple_plugins_get_all(); 187 void* purple_plugins_get_handle(); 188 void purple_plugins_init(); 189 void purple_plugins_uninit(); 190 PurplePluginAction* purple_plugin_action_new(const(char)* label, void function (PurplePluginAction*) callback); 191 void purple_plugin_action_free(PurplePluginAction* action); 192 } 193 } 194 else 195 { 196 extern( C ) nothrow 197 { 198 alias da_purple_plugin_new = PurplePlugin* function(gboolean native, const(char)* path); 199 alias da_purple_plugin_probe = PurplePlugin* function(const(char)* filename); 200 alias da_purple_plugin_register = gboolean function(PurplePlugin* plugin); 201 alias da_purple_plugin_load = gboolean function(PurplePlugin* plugin); 202 alias da_purple_plugin_unload = gboolean function(PurplePlugin* plugin); 203 alias da_purple_plugin_disable = void function(PurplePlugin* plugin); 204 alias da_purple_plugin_reload = gboolean function(PurplePlugin* plugin); 205 alias da_purple_plugin_destroy = void function(PurplePlugin* plugin); 206 alias da_purple_plugin_is_loaded = gboolean function(const(PurplePlugin)* plugin); 207 alias da_purple_plugin_is_unloadable = gboolean function(const(PurplePlugin)* plugin); 208 alias da_purple_plugin_get_id = const(gchar)* function(const(PurplePlugin)* plugin); 209 alias da_purple_plugin_get_name = const(gchar)* function(const(PurplePlugin)* plugin); 210 alias da_purple_plugin_get_version = const(gchar)* function(const(PurplePlugin)* plugin); 211 alias da_purple_plugin_get_summary = const(gchar)* function(const(PurplePlugin)* plugin); 212 alias da_purple_plugin_get_description = const(gchar)* function(const(PurplePlugin)* plugin); 213 alias da_purple_plugin_get_author = const(gchar)* function(const(PurplePlugin)* plugin); 214 alias da_purple_plugin_get_homepage = const(gchar)* function(const(PurplePlugin)* plugin); 215 alias da_purple_plugin_ipc_register = gboolean function(PurplePlugin* plugin, const(char)* command, PurpleCallback func, PurpleSignalMarshalFunc marshal, PurpleValue* ret_value, int num_params, ...); 216 alias da_purple_plugin_ipc_unregister = void function(PurplePlugin* plugin, const(char)* command); 217 alias da_purple_plugin_ipc_unregister_all = void function(PurplePlugin* plugin); 218 alias da_purple_plugin_ipc_get_params = gboolean function(PurplePlugin* plugin, const(char)* command, PurpleValue** ret_value, int* num_params, PurpleValue*** params); 219 alias da_purple_plugin_ipc_call = void* function(PurplePlugin* plugin, const(char)* command, gboolean* ok, ...); 220 alias da_purple_plugins_add_search_path = void function(const(char)* path); 221 alias da_purple_plugins_get_search_paths = GList* function(); 222 alias da_purple_plugins_unload_all = void function(); 223 alias da_purple_plugins_unload = void function(PurplePluginType type); 224 alias da_purple_plugins_destroy_all = void function(); 225 alias da_purple_plugins_save_loaded = void function(const(char)* key); 226 alias da_purple_plugins_load_saved = void function(const(char)* key); 227 alias da_purple_plugins_probe = void function(const(char)* ext); 228 alias da_purple_plugins_enabled = gboolean function(); 229 alias da_purple_plugins_register_probe_notify_cb = void function(void function (void*) func, void* data); 230 alias da_purple_plugins_unregister_probe_notify_cb = void function(void function (void*) func); 231 alias da_purple_plugins_register_load_notify_cb = void function(void function (PurplePlugin*, void*) func, void* data); 232 alias da_purple_plugins_unregister_load_notify_cb = void function(void function (PurplePlugin*, void*) func); 233 alias da_purple_plugins_register_unload_notify_cb = void function(void function (PurplePlugin*, void*) func, void* data); 234 alias da_purple_plugins_unregister_unload_notify_cb = void function(void function (PurplePlugin*, void*) func); 235 alias da_purple_plugins_find_with_name = PurplePlugin* function(const(char)* name); 236 alias da_purple_plugins_find_with_filename = PurplePlugin* function(const(char)* filename); 237 alias da_purple_plugins_find_with_basename = PurplePlugin* function(const(char)* basename); 238 alias da_purple_plugins_find_with_id = PurplePlugin* function(const(char)* id); 239 alias da_purple_plugins_get_loaded = GList* function(); 240 alias da_purple_plugins_get_protocols = GList* function(); 241 alias da_purple_plugins_get_all = GList* function(); 242 alias da_purple_plugins_get_handle = void* function(); 243 alias da_purple_plugins_init = void function(); 244 alias da_purple_plugins_uninit = void function(); 245 alias da_purple_plugin_action_new = PurplePluginAction* function(const(char)* label, void function (PurplePluginAction*) callback); 246 alias da_purple_plugin_action_free = void function(PurplePluginAction* action); 247 } 248 249 __gshared 250 { 251 da_purple_plugin_new purple_plugin_new; 252 da_purple_plugin_probe purple_plugin_probe; 253 da_purple_plugin_register purple_plugin_register; 254 da_purple_plugin_load purple_plugin_load; 255 da_purple_plugin_unload purple_plugin_unload; 256 da_purple_plugin_disable purple_plugin_disable; 257 da_purple_plugin_reload purple_plugin_reload; 258 da_purple_plugin_destroy purple_plugin_destroy; 259 da_purple_plugin_is_loaded purple_plugin_is_loaded; 260 da_purple_plugin_is_unloadable purple_plugin_is_unloadable; 261 da_purple_plugin_get_id purple_plugin_get_id; 262 da_purple_plugin_get_name purple_plugin_get_name; 263 da_purple_plugin_get_version purple_plugin_get_version; 264 da_purple_plugin_get_summary purple_plugin_get_summary; 265 da_purple_plugin_get_description purple_plugin_get_description; 266 da_purple_plugin_get_author purple_plugin_get_author; 267 da_purple_plugin_get_homepage purple_plugin_get_homepage; 268 da_purple_plugin_ipc_register purple_plugin_ipc_register; 269 da_purple_plugin_ipc_unregister purple_plugin_ipc_unregister; 270 da_purple_plugin_ipc_unregister_all purple_plugin_ipc_unregister_all; 271 da_purple_plugin_ipc_get_params purple_plugin_ipc_get_params; 272 da_purple_plugin_ipc_call purple_plugin_ipc_call; 273 da_purple_plugins_add_search_path purple_plugins_add_search_path; 274 da_purple_plugins_get_search_paths purple_plugins_get_search_paths; 275 da_purple_plugins_unload_all purple_plugins_unload_all; 276 da_purple_plugins_unload purple_plugins_unload; 277 da_purple_plugins_destroy_all purple_plugins_destroy_all; 278 da_purple_plugins_save_loaded purple_plugins_save_loaded; 279 da_purple_plugins_load_saved purple_plugins_load_saved; 280 da_purple_plugins_probe purple_plugins_probe; 281 da_purple_plugins_enabled purple_plugins_enabled; 282 da_purple_plugins_register_probe_notify_cb purple_plugins_register_probe_notify_cb; 283 da_purple_plugins_unregister_probe_notify_cb purple_plugins_unregister_probe_notify_cb; 284 da_purple_plugins_register_load_notify_cb purple_plugins_register_load_notify_cb; 285 da_purple_plugins_unregister_load_notify_cb purple_plugins_unregister_load_notify_cb; 286 da_purple_plugins_register_unload_notify_cb purple_plugins_register_unload_notify_cb; 287 da_purple_plugins_unregister_unload_notify_cb purple_plugins_unregister_unload_notify_cb; 288 da_purple_plugins_find_with_name purple_plugins_find_with_name; 289 da_purple_plugins_find_with_filename purple_plugins_find_with_filename; 290 da_purple_plugins_find_with_basename purple_plugins_find_with_basename; 291 da_purple_plugins_find_with_id purple_plugins_find_with_id; 292 da_purple_plugins_get_loaded purple_plugins_get_loaded; 293 da_purple_plugins_get_protocols purple_plugins_get_protocols; 294 da_purple_plugins_get_all purple_plugins_get_all; 295 da_purple_plugins_get_handle purple_plugins_get_handle; 296 da_purple_plugins_init purple_plugins_init; 297 da_purple_plugins_uninit purple_plugins_uninit; 298 da_purple_plugin_action_new purple_plugin_action_new; 299 da_purple_plugin_action_free purple_plugin_action_free; 300 } 301 }